home *** CD-ROM | disk | FTP | other *** search
/ The Sunday Times: The Month 2004 August / The Sunday Times - The Month 2004-08.iso / pc / engine / swf / text_pages.swf / scripts / frame_1 / DoAction.as
Encoding:
Text File  |  2004-06-23  |  12.5 KB  |  425 lines

  1. function loadImage(mc, node, extrapath)
  2. {
  3.    if(extrapath == null)
  4.    {
  5.       extrapath = "";
  6.    }
  7.    var strDefaultPath = Tardis.ASSETS_FOLDER + "images/" + Tardis.ActiveSection.id + "/";
  8.    var strImg = node.firstChild.nodeValue;
  9.    var diffpath = node.attributes.path;
  10.    if(diffpath != null)
  11.    {
  12.       strImg = diffpath + strImg;
  13.    }
  14.    else
  15.    {
  16.       strImg = strDefaultPath + extrapath + strImg;
  17.    }
  18.    if(strPathPrefix == null)
  19.    {
  20.       strPathPrefix = "";
  21.    }
  22.    mc.loadMovie(strPathPrefix + strImg);
  23. }
  24. function init()
  25. {
  26.    parseContent(nodeData);
  27.    createPages();
  28.    fillContent();
  29.    onComplete();
  30.    _visible = true;
  31. }
  32. function loadSampleContent(strName)
  33. {
  34.    this.xmlContent = new XML();
  35.    this.xmlContent.ignoreWhite = true;
  36.    this.xmlContent.onLoad = function(success)
  37.    {
  38.       if(success)
  39.       {
  40.          parseContent(this.firstChild);
  41.          createPages();
  42.          fillContent();
  43.       }
  44.    };
  45.    this.xmlContent.load("sample_xml/" + strName + ".xml");
  46. }
  47. function parseBoldTags(str)
  48. {
  49.    var openTagPosition = str.indexOf("<b>");
  50.    if(openTagPosition != -1)
  51.    {
  52.       var closeTagPosition = str.indexOf("</b>");
  53.       var word = str.substring(openTagPosition + 3,closeTagPosition);
  54.       var beginning = str.substring(0,openTagPosition).toString();
  55.       var end = str.substring(closeTagPosition + 4);
  56.       return beginning + "<font face=\'FranklinGotURWTDem\'>" + word + "</font>" + parseBoldTags(end);
  57.    }
  58.    return str;
  59. }
  60. function createPages()
  61. {
  62.    var i = 0;
  63.    while(i < arrPages.length)
  64.    {
  65.       var mPage = i != 0 ? mPage_0.duplicateMovieClip("mPage_" + i,i) : mPage_0;
  66.       mPage._visible = false;
  67.       i++;
  68.    }
  69. }
  70. function fillContent()
  71. {
  72.    var strID = Tardis.ActiveSection.id;
  73.    SECTION_COLOR = Tardis.Colors.getHex(strID);
  74.    SECTION_COLOR50 = Tardis.Colors.getHex(strID + "50");
  75.    DEFAULT_COLOR = Tardis.Colors.getHex("default");
  76.    DEFAULT_COLOR50 = Tardis.Colors.getHex("default50");
  77.    strDEFAULT_COLOR50 = Tardis.Colors.getString("default50");
  78.    var arrFields = new Array();
  79.    var i = 0;
  80.    while(i < arrPages.length)
  81.    {
  82.       var mPage = this["mPage_" + i];
  83.       mPage.gotoAndStop("layout_" + arrPages[i].type);
  84.       mPage.headline = arrPages[i].headline;
  85.       mPage.quote = arrPages[i].quote;
  86.       mPage.arrImages = arrPages[i].arrImages;
  87.       mPage.defaultVideoNumber = arrPages[i].defaultVideoNumber;
  88.       if(mPage.txtBody_0 != undefined)
  89.       {
  90.          arrFields.push("mPage_" + i + ".txtBody_0");
  91.       }
  92.       if(mPage.txtBody_1 != undefined)
  93.       {
  94.          arrFields.push("mPage_" + i + ".txtBody_1");
  95.       }
  96.       i++;
  97.    }
  98.    var boldedCopy = parseBoldTags(strCopy);
  99.    flowText(boldedCopy,arrFields);
  100.    mPageNav.setColourUp(DEFAULT_COLOR50);
  101.    mPageNav.setColourDown(DEFAULT_COLOR);
  102.    mPageNav.setTotalPages(arrPages.length);
  103.    mPageNav.navigateTo(1);
  104.    _visible = true;
  105. }
  106. function parseContent(xmlContent)
  107. {
  108.    var arrNodes = xmlContent.childNodes;
  109.    this.arrPages = new Array();
  110.    this.arrVideos = new Array();
  111.    var i = 0;
  112.    while(i < arrNodes.length)
  113.    {
  114.       if(arrNodes[i].nodeName == "copy")
  115.       {
  116.          this.strCopy = arrNodes[i].firstChild.nodeValue;
  117.       }
  118.       else if(arrNodes[i].nodeName == "page")
  119.       {
  120.          var page = {type:arrNodes[i].attributes.type,arrImages:new Array()};
  121.          var arrChildren = arrNodes[i].childNodes;
  122.          var j = 0;
  123.          while(j < arrChildren.length)
  124.          {
  125.             if(arrChildren[j].nodeName == "image")
  126.             {
  127.                var image = {};
  128.                for(var k in arrChildren[j].childNodes)
  129.                {
  130.                   image[arrChildren[j].childNodes[k].nodeName] = arrChildren[j].childNodes[k].firstChild.nodeValue;
  131.                }
  132.                if(arrChildren[j].byName("image").attributes.fullscreen == "true")
  133.                {
  134.                   image.hasFullscreen = true;
  135.                }
  136.                else
  137.                {
  138.                   image.hasFullscreen = false;
  139.                }
  140.                if(image.image != "" && image.image != null)
  141.                {
  142.                   page.arrImages.push(image);
  143.                }
  144.             }
  145.             else if(arrChildren[j].nodeName == "video")
  146.             {
  147.                page.defaultVideoNumber = arrChildren[j].firstChild.nodeValue;
  148.             }
  149.             else
  150.             {
  151.                page[arrChildren[j].nodeName] = arrChildren[j].firstChild.nodeValue;
  152.             }
  153.             j++;
  154.          }
  155.          arrPages.push(page);
  156.       }
  157.       else if(arrNodes[i].nodeName == "videos")
  158.       {
  159.          var arrChildren = arrNodes[i].childNodes;
  160.          var j = 0;
  161.          while(j < arrChildren.length)
  162.          {
  163.             var vid = new Object();
  164.             vid.nodeData = arrChildren[j];
  165.             var k = 0;
  166.             while(k < arrChildren[j].childNodes.length)
  167.             {
  168.                vid[arrChildren[j].childNodes[k].nodeName] = arrChildren[j].childNodes[k].firstChild.nodeValue;
  169.                k++;
  170.             }
  171.             arrVideos[arrChildren[j].attributes.id] = vid;
  172.             j++;
  173.          }
  174.       }
  175.       i++;
  176.    }
  177. }
  178. function parseUpCaps(str)
  179. {
  180.    var openTagPosition = str.indexOf("<upcap>");
  181.    if(openTagPosition != -1)
  182.    {
  183.       var closeTagPosition = str.indexOf("</upcap>");
  184.       var word = str.substring(openTagPosition + 7,closeTagPosition);
  185.       var beginning = str.substring(0,openTagPosition);
  186.       var end = str.substring(closeTagPosition + 8);
  187.       return beginning + "<TEXTFORMAT LEADING=\'-2\'><font size=\'24\' face=\'FranklinNeoExtBolCon\' color=\'#999999\'>" + word + "</font></TEXTFORMAT> " + end;
  188.    }
  189.    return str;
  190. }
  191. function navigateTo(pageNumber)
  192. {
  193.    mVideo.shutDownRemotely();
  194.    var id = pageNumber - 1;
  195.    var i = 0;
  196.    while(i < arrPages.length)
  197.    {
  198.       this["mPage_" + i]._visible = false;
  199.       i++;
  200.    }
  201.    var mc = this["mPage_" + id];
  202.    if(mc.arrImages.length)
  203.    {
  204.       loadImages(mc);
  205.    }
  206.    if(mc.defaultVideoNumber != null)
  207.    {
  208.       playVideo(mc.defaultVideoNumber);
  209.       mc.txtNote_0.htmlText = "";
  210.    }
  211.    if(arrPages[id].type == "12")
  212.    {
  213.       mc.txtQuote._y = mc.txtHeadline._y + mc.txtHeadline.textHeight + 12;
  214.    }
  215.    mc.txtBody_0.textColor = DEFAULT_COLOR;
  216.    mc.txtBody_1.textColor = DEFAULT_COLOR;
  217.    mc.txtHeadline.textColor = SECTION_COLOR;
  218.    mc.txtQuote.textColor = SECTION_COLOR50;
  219.    mc.txtNote_0.textColor = DEFAULT_COLOR;
  220.    mc._visible = true;
  221.    currPage = mc;
  222.    if(arrPages[id].type == "10")
  223.    {
  224.       mPageNav._visible = false;
  225.    }
  226.    else
  227.    {
  228.       mPageNav._visible = true;
  229.    }
  230.    mPageNav.setCurrentPage(pageNumber);
  231. }
  232. function loadImages(mPage)
  233. {
  234.    var strDefaultPath = Tardis.ASSETS_FOLDER + "images/" + Tardis.ActiveSection.id + "/";
  235.    var i = 0;
  236.    while(i < mPage.arrImages.length)
  237.    {
  238.       mPage["mImage_" + i].loadMovie(strDefaultPath + mPage.arrImages[i].image);
  239.       mPage["txtCaption_" + i].htmlText = mPage.arrImages[i].caption;
  240.       mPage["txtCaption_" + i].textColor = DEFAULT_COLOR;
  241.       if(mPage.arrImages[i].hasFullscreen)
  242.       {
  243.          mPage.mc_controls._visible = true;
  244.       }
  245.       else
  246.       {
  247.          mPage.mc_controls._visible = false;
  248.       }
  249.       mPage["txtNote_" + i].htmlText = mPage.arrImages[i].note;
  250.       mPage["txtNote_" + i].textColor = DEFAULT_COLOR;
  251.       i++;
  252.    }
  253. }
  254. function playVideo(videoId)
  255. {
  256.    this.currVideoId = videoId;
  257.    mVideo.shutDownRemotely();
  258.    this.onVideoModuleLoaded = function(mVideo)
  259.    {
  260.       mVideo.nodeData = arrVideos[currVideoId].nodeData;
  261.       mVideo.init();
  262.       currPage.txtCaption_0.htmlText = arrVideos[currVideoId].title;
  263.       currPage.txtCaption_0.textColor = Tardis.Colors.getHex("default");
  264.    };
  265.    mVideo.loadMovie(Tardis.ENGINE_FOLDER + "modules/video.swf");
  266. }
  267. function searchandreplace(the_string, search_string, replace_string, occurrences, backward)
  268. {
  269.    if(search_string == replace_string)
  270.    {
  271.       return the_string;
  272.    }
  273.    var found = 0;
  274.    if(backward == true)
  275.    {
  276.       var pos = the_string.lastIndexOf(search_string);
  277.       while(pos >= 0)
  278.       {
  279.          found++;
  280.          var start_string = the_string.substr(0,pos);
  281.          var end_string = the_string.substr(pos + search_string.length);
  282.          the_string = start_string + replace_string + end_string;
  283.          pos = the_string.lastIndexOf(search_string,start_string.length);
  284.          if(found == occurrences)
  285.          {
  286.             pos = -1;
  287.          }
  288.       }
  289.    }
  290.    else
  291.    {
  292.       var pos = the_string.indexOf(search_string);
  293.       while(pos >= 0)
  294.       {
  295.          found++;
  296.          var start_string = the_string.substr(0,pos);
  297.          var end_string = the_string.substr(pos + search_string.length);
  298.          the_string = start_string + replace_string + end_string;
  299.          pos = the_string.indexOf(search_string,pos + replace_string.length);
  300.          if(found == occurrences)
  301.          {
  302.             pos = -1;
  303.          }
  304.       }
  305.    }
  306.    return the_string;
  307. }
  308. function tagStack(aString)
  309. {
  310.    var error = false;
  311.    var tagArray = [];
  312.    var validTags = ["a","b","i","u","font","p"];
  313.    var tStringArray = aString.split("<");
  314.    var i = 1;
  315.    while(i < tStringArray.length)
  316.    {
  317.       var newTag = "<" + tStringArray[i].slice(0,tStringArray[i].indexOf(">") + 1);
  318.       var shortForm = newTag.indexOf(" ") <= -1 ? newTag : newTag.slice(0,newTag.indexOf(" ")) + ">";
  319.       var tagOnly = shortForm.indexOf("/") <= -1 ? shortForm.slice(1,-1) : shortForm.slice(2,-1);
  320.       isValidTag = false;
  321.       for(var j in validTags)
  322.       {
  323.          if(validTags[j] == tagOnly)
  324.          {
  325.             isValidTag = true;
  326.             break;
  327.          }
  328.       }
  329.       if(isValidTag)
  330.       {
  331.          if(newTag.charAt(1) == "/")
  332.          {
  333.             var lastTag = tagArray.pop();
  334.             lastTagShort = lastTag.indexOf(" ") <= -1 ? lastTag : lastTag.slice(0,lastTag.indexOf(" ")) + ">";
  335.             lastTagShort = lastTagShort.indexOf("/") <= -1 ? lastTagShort.slice(1,-1) : lastTagShort.slice(2,-1);
  336.             if(lastTagShort != tagOnly)
  337.             {
  338.                error = true;
  339.                break;
  340.             }
  341.          }
  342.          else
  343.          {
  344.             tagArray.push(newTag);
  345.          }
  346.       }
  347.       i++;
  348.    }
  349.    return !error ? tagArray : -1;
  350. }
  351. function fixText(textString)
  352. {
  353.    var tempText = searchandreplace(textString,String.fromCharCode(13)," <br>");
  354.    tempText = searchandreplace(textString,"\n"," <br>");
  355.    tempText = searchandreplace(textString,"\r"," <br>");
  356.    tempText = searchandreplace(tempText,String.fromCharCode(9)," ");
  357.    var textArray = tempText.split(" ");
  358.    return textArray;
  359. }
  360. function flowText(textString, arrayOfTextFields)
  361. {
  362.    var textArray = fixText(textString);
  363.    var currentWordIndex = 0;
  364.    var currentFieldIndex = 0;
  365.    var maxWordIndex = textArray.length;
  366.    var timeArray = [];
  367.    var leftOverTags = "";
  368.    var i;
  369.    var lastWord = 0;
  370.    for(i in arrayOfTextFields)
  371.    {
  372.       eval(arrayOfTextFields[i]).html = false;
  373.       eval(arrayOfTextFields[i]).text = "";
  374.       eval(arrayOfTextFields[i]).htmlText = "";
  375.    }
  376.    do
  377.    {
  378.       if(currentWordIndex < maxWordIndex)
  379.       {
  380.          var field = eval(arrayOfTextFields[currentFieldIndex]);
  381.          var tempString = "";
  382.          field.html = true;
  383.          if(textArray[currentWordIndex].indexOf("<br>") != -1)
  384.          {
  385.             textArray[currentWordIndex] = searchandreplace(textArray[currentWordIndex],"<br>","");
  386.          }
  387.          i = currentWordIndex;
  388.          while(i < maxWordIndex)
  389.          {
  390.             var newWord = textArray[i];
  391.             newWord = newWord != "<br>" ? newWord + " " : newWord;
  392.             tempString += newWord;
  393.             field.htmlText = "";
  394.             field.htmlText = tempString;
  395.             if(field.maxscroll > 1)
  396.             {
  397.                lastWord = i;
  398.                break;
  399.             }
  400.             i++;
  401.          }
  402.       }
  403.       else
  404.       {
  405.          return true;
  406.       }
  407.       field.htmlText = "";
  408.       var endAt = i;
  409.       field.htmlText = leftOverTags + textArray.slice(currentWordIndex,endAt).join(" ");
  410.       leftOverTags = tagStack(textArray.slice(0,endAt).join(" ")).join("");
  411.       currentWordIndex = endAt;
  412.       currentFieldIndex++;
  413.    }
  414.    while(currentFieldIndex <= arrayOfTextFields.length);
  415.    
  416.    var leftOverText = textArray.slice(lastWord,textArray.length).join(" ");
  417.    return leftOverText;
  418. }
  419. _visible = false;
  420. this.onUnload = function()
  421. {
  422.    mVideo.shutDownRemotely();
  423.    Tardis.overlay.active = false;
  424. };
  425.